﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;


namespace MotoGame.Estados.Fases.Fase1
{
    class Fundo
    {
        Texture2D texture;
        Rectangle origem;
        public Rectangle Origem
        {
            get { return origem; }
        }

        Rectangle destino;
        GameWindow Window;

        float velocidadeRelativaX;
        public float VelocidadeRelativa
        {
            get { return velocidadeRelativaX; }
            set { velocidadeRelativaX = value; }
        }

        public Fundo(Texture2D texture, GameWindow Window)
        {
            this.texture = texture;
            this.Window = Window;

            destino = new Rectangle(0, 0, Window.ClientBounds.Width, Window.ClientBounds.Height);
            origem = new Rectangle(0, texture.Height - Window.ClientBounds.Height, Window.ClientBounds.Width, Window.ClientBounds.Height);
            VelocidadeRelativa = 1.0f;
        }

        public void Update(GameTime gameTime, Vector2 offset)
        {
            origem.X += (int)(offset.X * velocidadeRelativaX);
            origem.Y += (int)(offset.Y);

            if (origem.X < 0) { origem.X = 0; }
            if (origem.Y < 0) { origem.Y = 0; }

            if (origem.X > texture.Width - Window.ClientBounds.Width) { origem.X = texture.Width - Window.ClientBounds.Width; }
            if (origem.Y > texture.Height - Window.ClientBounds.Height) { origem.Y = texture.Height - Window.ClientBounds.Height; }
        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(texture, destino, origem, Color.White);
        }

        public bool AtTop
        {
            get { return origem.Y <= 0; }
        }

        public bool AtBottom
        {
            get { return origem.Y >= texture.Height - Window.ClientBounds.Height; }
        }

        public bool AtLeft
        {
            get { return origem.X <= 0; }
        }

        public bool AtRight
        {
            get { return origem.X >= texture.Width - Window.ClientBounds.Width; }
        }
    }
}
